package com.delio.client.pagos.contratos;

import java.util.Date;

import com.delio.client.idioma.DelioConstants;
import com.delio.client.pagos.aportes.Aportes;
import com.delio.client.pagos.aportes.PanelAsignarAporte;
import com.delio.client.pagos.empleados.Empleados;
import com.delio.client.pagos.empleados.PanelGridEmpleado;
import com.delio.client.pagos.horarios.Horarios;
import com.delio.client.pagos.tablasbasicas.Tipos;
import com.delio.client.util.ComboboxFieldBinding;
import com.delio.client.util.Utilities;
import com.extjs.gxt.ui.client.binding.FieldBinding;
import com.extjs.gxt.ui.client.binding.FormBinding;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.HiddenField;
import com.extjs.gxt.ui.client.widget.form.NumberField;
import com.extjs.gxt.ui.client.widget.form.TextArea;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
import com.google.gwt.core.client.GWT;

public class PanelNuevoContrato extends FormPanel {

	private DelioConstants k = GWT.create(DelioConstants.class);
	private FormBinding formbinding;

	private HiddenField<String> id;
	private ComboBox<BeanModel> cmbTipoContrato;
	private ComboBox<BeanModel> cmbFormapago;
	private ComboBox<BeanModel> cmbTipoEmpleo;
	private ComboBox<BeanModel> cmbCargo;
	private ComboBox<BeanModel> cmbTurno;
	private NumberField txtDuracion;

	private TextArea txtObservacion;
	private NumberField txtSueldo;
	private DateField fechainicio;

	//

	public PanelNuevoContrato() {
		super();
		setHeading(k.contrato());
		setLayout(new FormLayout());
		setHeaderVisible(false);
		setBodyBorder(false);
		setPadding(3);
		formbinding = new FormBinding(this, true);

		Empleados.panelnuevocontrato = PanelNuevoContrato.this;
		PanelGridContrato.panelnuevocontrato = PanelNuevoContrato.this;

		Contratos.panelnuevocontrato = this;
		PanelGridEmpleado.panelnuevocontrato=this;

		id = new HiddenField<String>();

		Tipos.getList("listTipoContratos");
		Tipos.loader.load();

		cmbTipoContrato = new ComboBox<BeanModel>();
		cmbTipoContrato.setFieldLabel(k.periodoPago());
		cmbTipoContrato.setEmptyText(k.comboempty());
		cmbTipoContrato.setEditable(false);
		cmbTipoContrato.setDisplayField("tipo");
		cmbTipoContrato.setValueField("tipo");
		cmbTipoContrato.setStore(Tipos.store);
		cmbTipoContrato.setTriggerAction(TriggerAction.ALL);
		cmbTipoContrato.setAllowBlank(false);
		cmbTipoContrato.setUseQueryCache(false);

		Tipos.getList("listFormaPagos");
		Tipos.loader.load();
		cmbFormapago = new ComboBox<BeanModel>();
		cmbFormapago.setFieldLabel(k.formapago());
		cmbFormapago.setEmptyText(k.comboempty());
		cmbFormapago.setEditable(false);
		cmbFormapago.setDisplayField("tipo");
		cmbFormapago.setValueField("tipo");
		cmbFormapago.setStore(Tipos.store);
		cmbFormapago.setAllowBlank(false);
		cmbFormapago.setUseQueryCache(false);

		Tipos.getList("listTipoEmpleos");
		Tipos.loader.load();
		cmbTipoEmpleo = new ComboBox<BeanModel>();
		cmbTipoEmpleo.setFieldLabel(k.tipocontrato());
		cmbTipoEmpleo.setEmptyText(k.comboempty());
		cmbTipoEmpleo.setEditable(false);
		cmbTipoEmpleo.setDisplayField("tipo");
		cmbTipoEmpleo.setValueField("tipo");
		cmbTipoEmpleo.setStore(Tipos.store);
		cmbTipoEmpleo.setAllowBlank(false);
		cmbTipoEmpleo.setUseQueryCache(false);

		cmbTipoEmpleo.addListener(Events.SelectionChange,
				new Listener<BaseEvent>() {

					@Override
					public void handleEvent(BaseEvent be) {

						if (cmbTipoEmpleo.getValue() != null)
							if (cmbTipoEmpleo.getValue().get("tipo")
									.equals("Planilla")) {

								Aportes.getDescuentoAportes();
								Aportes.loader2.load();
								Aportes.getAportes();

								Aportes.loader.load();
								new PanelAsignarAporte().show();

							}

					}
				});

		Tipos.getList("listCargos");
		Tipos.loader.load();
		cmbCargo = new ComboBox<BeanModel>();
		cmbCargo.setFieldLabel(k.cargo());
		cmbCargo.setEmptyText(k.comboempty());
		cmbCargo.setEditable(false);
		cmbCargo.setDisplayField("tipo");
		cmbCargo.setValueField("tipo");
		cmbCargo.setStore(Tipos.store);
		cmbCargo.setAllowBlank(false);
		cmbCargo.setUseQueryCache(false);
		// cmbCargo.addKeyListener(new KeyListener() {
		// public void componentKeyPress(ComponentEvent event) {
		// Integer c = event.getKeyCode();
		// if (c == 43) {
		// new PanelGridCargo().show();
		// event.preventDefault();
		// }
		// }
		//
		// });

		Horarios.getList();
		Horarios.loader.load();
		cmbTurno = new ComboBox<BeanModel>();
		cmbTurno.setFieldLabel(k.turno());
		cmbTurno.setEmptyText(k.comboempty());
		cmbTurno.setEditable(false);
		cmbTurno.setDisplayField("turno");
		cmbTurno.setValueField("turno");
		cmbTurno.setStore(Horarios.store);
		cmbTurno.setAllowBlank(false);
		cmbTurno.setUseQueryCache(false);
		// cmbTurno.addKeyListener(new KeyListener() {
		// public void componentKeyPress(ComponentEvent event) {
		// Integer c = event.getKeyCode();
		// if (c == 43) {
		// new PanelGridHorario().show();
		// event.preventDefault();
		// }
		// }
		//
		// });

		txtDuracion = new NumberField();
		txtDuracion.setPropertyEditorType(Integer.class);
		txtDuracion.setAllowBlank(false);
		txtDuracion.setMinValue(0);
		txtDuracion.setMaxValue(120);
		txtDuracion.setFieldLabel(k.duracion());

		txtSueldo = new NumberField();
		txtSueldo.setFieldLabel(k.sueldo());
		txtSueldo.setMinValue(50.00);
		txtSueldo.setMaxValue(10000.00);

		txtSueldo.setAllowBlank(false);
		txtSueldo.setPropertyEditorType(Double.class);

		fechainicio = new DateField();
		fechainicio.setAllowBlank(false);
		fechainicio.setFieldLabel(k.fechainicio());
		fechainicio.setValue(new Date());

		txtObservacion = new TextArea();
		txtObservacion.setHideLabel(true);
		txtObservacion.setHeight(50);
		txtObservacion.setEmptyText(k.observaciones());

		add(id);

		add(cmbCargo, new FormData("95%"));
		add(cmbTipoContrato, new FormData("95%"));
		add(txtSueldo, new FormData("75%"));
		add(cmbFormapago, new FormData("95%"));

		add(cmbTurno, new FormData("95%"));
		add(fechainicio, new FormData("95%"));
		add(txtDuracion, new FormData("75%"));
		add(cmbTipoEmpleo, new FormData("95%"));
		add(txtObservacion, new FormData("95%"));

		setStore(Contratos.store);

		
	}

	public void setStore(ListStore<BeanModel> store) {

		formbinding.addFieldBinding(new FieldBinding(id, "id"));
		formbinding
				.addFieldBinding(new ComboboxFieldBinding(cmbCargo, "cargo"));
		formbinding.addFieldBinding(new ComboboxFieldBinding(cmbFormapago,
				"formapago"));
		formbinding.addFieldBinding(new ComboboxFieldBinding(cmbTipoContrato,
				"tipocontrato"));

		formbinding
				.addFieldBinding(new ComboboxFieldBinding(cmbTurno, "turno"));

		formbinding.addFieldBinding(new FieldBinding(txtSueldo, "sueldo"));
		formbinding.addFieldBinding(new FieldBinding(txtDuracion, "duracion"));
		formbinding.addFieldBinding(new ComboboxFieldBinding(cmbTipoEmpleo,
				"tipoempleo"));
		formbinding.setStore(store);

	}

	public void reset() {
		id.clear();
		cmbCargo.clearSelections();
		cmbFormapago.clearSelections();
		cmbTipoContrato.clearSelections();
		cmbTipoEmpleo.clearSelections();
		cmbTurno.clearSelections();
		txtSueldo.clear();
		fechainicio.setValue(new Date());
		txtDuracion.clear();

		PanelGridContrato.grid.getSelectionModel().deselectAll();
		unbind();

	}

	public void bind(BeanModel selectedModel) {
		formbinding.bind(selectedModel);
	
	}

	public void unbind() {
		formbinding.unbind();
		
	}

	public void save(Integer empleado_id) {

		Integer cargo_id = Integer.valueOf(cmbCargo.getValue().get("id")
				.toString());
		Integer tipoempleo_id = Integer.valueOf(cmbTipoEmpleo.getValue()
				.get("id").toString());
		Integer formapago_id = Integer.valueOf(cmbFormapago.getValue()
				.get("id").toString());
		Integer tipocontrato_id = Integer.valueOf(cmbTipoContrato.getValue()
				.get("id").toString());
		Integer turno_id = Integer.valueOf(cmbTurno.getValue().get("id")
				.toString());

		Double sueldo = txtSueldo.getValue().doubleValue();
		Integer duracion = txtDuracion.getValue().intValue();
		Date fecha = fechainicio.getValue();
		String observacion = txtObservacion.getValue();
		Date fechatermino = Utilities.getFecha(fecha, duracion);

		Contrato co = new Contrato();

		if (id.getValue() != null) {
			co.setId(Integer.valueOf(id.getValue().toString()));
		}
		co.setEmpleado_id(empleado_id);
		co.setCargo_id(cargo_id);
		co.setTipocontrato_id(tipocontrato_id);
		co.setFormapago_id(formapago_id);
		co.setTipoempleo_id(tipoempleo_id);
		co.setTurno_id(turno_id);
		co.setDuracion(duracion);
		co.setSueldo(sueldo);
		co.setObservacion(observacion);
		co.setFechainicio(fecha);
		co.setFechatermino(fechatermino);

		Contratos.Save(co);

	}

	
}
